需求是,把所有的成员平均得分成若干个小组。这里,我会提供一个人员列表,比如成员有50人,需要分成7个小组,要求随机性,每次和每次分组的结构应该不一致。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| #!/bin/bash f=members.txt n=`wc -l $f|awk '{print $1}'` get_n() { l=`echo $1|wc -c` n1=$RANDOM n2=$[$n1+$l] g_id=$[$n1%7] if [ $g_id -eq 0 ] then g_id=7 fi echo $g_id } for i in `seq 1 7` do [ -f n_$i.txt ] && rm -f n_$i.txt done for i in `seq 1 $n` do name=`sed -n "$i"p $f` g=`get_n $name` echo $name >> n_$g.txt done nu(){ wc -l $1|awk '{print $1}' } max(){ ma=0 for i in `seq 1 7` do n=`nu n_$i.txt` if [ $n -gt $ma ] then ma=$n fi done echo $ma } min(){ mi=50 for i in `seq 1 7` do n=`nu n_$i.txt` if [ $n -lt $mi ] then mi=$n fi done echo $mi } ini_min=1 while [ $ini_min -le 7 ] do m1=`max` m2=`min` ini_min=m2 for i in `seq 1 7` do n=`nu n_$i.txt` if [ $n -eq $m1 ] then f1=n_$i.txt elif [ $n -eq $m2 ] then f2=n_$i.txt fi done name=`tail -n1 $f1` echo $name >> $f2 sed -i "/$name/d" $f1 ini_min=$[$ini_min+1] done for i in `seq 1 7` do echo "$i 组成员有:" cat n_$i.txt echo done
|